import { login, getUserInfo, getUserDetailById } from '@/api/user'

// 引用封装的 Cookie 存储或获取token
import { getToken, setToken, removeToken, setTimeOutKey } from '@/utils/auth'
// 可以使用本地存储，但是这个项目使用的是Cookie 用插件处理，可以设置存储的有效时间，设置一段时间后存储的数据过期
// 如果使用的是sessionStorage，会随着会话的结束而失效，退出登录之后就清除数据
import { resetRouter } from '@/router'

const state = {
  token: getToken(),
  userInfo: {}
}
const mutations = {
  // 保存用户基本资料
  setUserInfo(state, data) {
    state.userInfo = { ...data }
  },
  // 清除用户基本资料
  removeUserInfo(state, data) {
    state.userInfo = {}
  },
  // 设置token
  setToken(state, data) {
    state.token = data
    setToken(data)
    setTimeOutKey(Date.now())
  },
  // 清除token
  removeToken(state) {
    state.token = null
    removeToken()
  }
}
const actions = {
  // 发请求登录
  async userLogin(store, data) {
    const res = await login(data)
    // console.log(res)
    store.commit('setToken', res)
  },
  // 获取用户基本资料
  async getUserInfo(store) {
    // 发请求
    const res = await getUserInfo()
    const userDetail = await getUserDetailById(res.userId)
    // console.log(userDetail)
    const result = { ...res, ...userDetail }
    // 把获取到的数据，保存到state中
    store.commit('setUserInfo', result)
    // console.log(result)
    return result
  },
  // 退出登录
  logout(store) {
    // 清空路由
    resetRouter()
    // 清除token
    store.commit('removeToken')
    // 清除用户数据
    store.commit('removeUserInfo')
  }
}

export default {
  namespaced: true,
  state,
  mutations,
  actions
}
